package com.ly.algorithm.leetcode.hashtable;

import java.util.HashMap;
import java.util.Map;

/**
 * @Classname Problem560
 * @Description
 *
 * 给定一个整数数组和一个整数 k，你需要找到该数组中和为 k 的连续的子数组的个数。
 *
 * 示例 1 :
 *
 * 输入:nums = [1,1,1], k = 2
 * 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
 *
 * @Date 2020/12/20 14:40
 * @Author 冷心影翼
 */
public class Problem560 {

	public static void main(String[] args) {
		Solution560 solution560 = new Solution560();
		int i = solution560.subarraySum(new int[]{3, 4, 7,2,-3,1,4,2}, 7);
		System.out.println(i);
	}
}

class Solution560 {



	public int subarraySum(int[] nums, int k) {
		Map<Integer,Integer> hashMap = new HashMap<>();
		hashMap.put(0,1);
		int res = 0;
		int pre = 0;
		for(int i=0;i<nums.length;i++) {
			pre += nums[i];
			if(hashMap.containsKey(pre - k)) {
				res += hashMap.get(pre-k);
			}
			hashMap.put(pre,hashMap.getOrDefault(pre,0)+1);
 		}
 		return res;
	}

}
